1. Background ( Content-Length / Transfer-Encoding: chunked )1.1 Content-Length1.2 Transfer-Encoding: chunked1.3 μ·¨μ½μ λ±μ₯ λ°°κ²½2. HTTP Smuggling (HTTP 1.1)2.1 CL-TE2.2 TE-CL3.3 TE.TE2.4 CL.03. HTTP Smuggling (HTTP/2)3.1 HTTP/1.1 vs 23.2 downgrades HTTP/2 requests4. Smuggling μμ4.1 /admin κ²½λ‘ μ κ·Ό λ°©μ§ μ°ν4.2 λ―Έλ€μ¨μ΄βμλμλ² μ 보 μ μΆ / μ¬μ©μ μμ² LeakReference
Β
1. Background ( Content-Length / Transfer-Encoding: chunked )
1.1 Content-Length
κ°λ
Content-Length
ν€λλ HTTP μλ΅ λλ μμ²μ λ³Έλ¬Έ κΈΈμ΄λ₯Ό λ°μ΄νΈ λ¨μλ‘ λνλ
λλ€. ν΄λΌμ΄μΈνΈμ μλ²λ μ΄ κ°μ ν΅ν΄ λ°μ΄ν°λ₯Ό μ μ‘ν λ μ΄λκΉμ§ μ½μ΄μΌ νλμ§ μ μ μμ΅λλ€.보ν΅
μ μ‘ν λ°μ΄ν°μ μ 체 ν¬κΈ°λ₯Ό 미리 μκ³ μμ λ μ¬μ©
λ©λλ€. ν€λμ μ΄ κ°μ΄ ν¬ν¨λλ©΄, ν΄λΌμ΄μΈνΈλ λ³Έλ¬Έ λ°μ΄ν°λ₯Ό μ νν κ·Έ κΈΈμ΄λ§νΌ μ½μ΅λλ€.Β
Β
μ¬μ©
μ μ μ½ν μΈ μ μ‘
: HTML νμΌ, μ΄λ―Έμ§, λΉλμ€ λ±μ μ μ νμΌμ μ μ‘ν λ μ£Όλ‘ μ¬μ©λ©λλ€. μ΄λ¬ν νμΌμ ν¬κΈ°λ μ μ‘ μ μ 미리 μ μ μμΌλ―λ‘Content-Length
λ₯Ό μ¬μ©ν΄ νμΌ ν¬κΈ°λ₯Ό λͺ μν μ μμ΅λλ€.
λ¨μΌ μμ²/μλ΅ λ°μ΄ν°
: μμ²μ΄λ μλ΅μ λ°μ΄ν° ν¬κΈ°κ° κ³ μ μ μ΄κ³ 미리 μ μ μλ κ²½μ°μ μ¬μ©λ©λλ€. μλ₯Ό λ€μ΄, μ μ μΉ νμ΄μ§λ₯Ό μ 곡νλ κ²½μ°μ μ ν©ν©λλ€.
Β
Β
μμ
μλ₯Ό λ€μ΄ abcdef λΌλ λ¬Έμμ΄μ 보λΌλμλ
byte
κ° 6
μ΄κΈ° λλ¬Έμ λ€μκ³Ό κ°μ΄ μ μ‘λ©λλ€. Β
Β
Β
Β
Β
Β
1.2 Transfer-Encoding: chunked
κ°λ
Transfer-Encoding: chunked
λ HTTP/1.1μμ λμ
λ λ©μ»€λμ¦
μΌλ‘, λ°μ΄ν°κ° μΌμ ν ν¬κΈ°μ μ²ν¬(chunk)λ‘ λλμ΄ μ μ‘λ©λλ€. κ° μ²ν¬λ μ체μ μΌλ‘ ν¬κΈ°λ₯Ό κ°μ§κ³ μμΌλ©°, ν΄λΌμ΄μΈνΈλ κ° μ²ν¬μ κΈΈμ΄λ₯Ό μ½μ λ€μ ν΄λΉ μ²ν¬ λ°μ΄ν°λ₯Ό μ½μ΅λλ€.chunked μ μ‘ μΈμ½λ©μ λ°μ΄ν°μ μ΄ ν¬κΈ°λ₯Ό 미리 μ μ μλ κ²½μ°μ μ μ©ν©λλ€. κ° μ²ν¬μ λμ
0
ν¬κΈ°μ μ²ν¬λ‘ νμλμ΄ λ°μ΄ν°μ λμ μ립λλ€.Β
Β
μ¬μ© μν©
λμ μ½ν μΈ μ μ‘
: λ°μ΄ν°μ ν¬κΈ°λ₯Ό 미리 μ μ μλ κ²½μ°, μλ₯Ό λ€μ΄, μ€μκ°μΌλ‘ μμ±λλ λ°μ΄ν°λ μ€νΈλ¦¬λ° μ½ν μΈ λ₯Ό μ μ‘ν λ μ¬μ©λ©λλ€.
λ°μ΄ν° μμ± μκ°μ΄ κΈ΄ κ²½μ°
: μλ²κ° λ°μ΄ν° μμ±μ μκ°μ΄ 걸리λ κ²½μ°μλ μ μ©ν©λλ€. μλ₯Ό λ€μ΄, λν λ³΄κ³ μ μμ±κ³Ό κ°μ μμ μ΄ λλ λκΉμ§ κΈ°λ€λ¦¬μ§ μκ³ , λΆλΆμ μΌλ‘ μμ±λ λ°μ΄ν°λ₯Ό λ°λ‘ μ μ‘ν μ μμ΅λλ€.
Β
Β
μμ
- μ¬κΈ°μ μ€μν μ μ
λ°μ΄ν° μ μ‘ μ’ λ£ λΆλΆμμ 0\r\n\r\n
μ 보λΈλ€λ κ² μ λλ€.
Β
Β
Β
Β
Β
Β
1.3 μ·¨μ½μ λ±μ₯ λ°°κ²½
μ΅κ·Όμλ νλ‘ νΈ/λ°±μλ μλ²λ‘ λλμ΄μ νκ²½μ ꡬμΆνκ±°λ, λμ©λ νΈλν½μ μ²λ¦¬νλ κ²½μ° λ‘λ λ°Έλ°μ±μ ν΅ν΄ νΈλν½μ λΆμ°νλ λ± λ€μν μλ² κ΅¬μΆ νκ²½μ΄ μ‘΄μ¬ν©λλ€. μ΄λ νΈλν½μ μ²λ¦¬νλ κ³Όμ μμ
λ―Έλ€μ¨μ΄μ μλμλ²μ λ°μ΄ν° μ μ‘μ λ°μλ€μ΄λ λ°©μμ΄ λ€λ₯΄λ©΄ Smuggling μ·¨μ½μ μ΄ λ°μν©λλ€.
Β
Β
Β
μμνκΈ° μ
ν΄λΉ κΈμ μμνκΈ° μ μ μ©μ΄κ° ν·κ°λ¦΄ μ μμ΄ μ 리νκ² μ΅λλ€.
λ―Έλ€μ¨μ΄
== 리λ²μ€ νλ‘μ, νλ‘ νΈμλ μλ² λ±λ± μ€κ°μ§μ
μλμλ²
== λ°±μλ μλ²
Β
Β
Β
Β
Β
Β
Β
Β
Β
Β
2. HTTP Smuggling (HTTP 1.1)
HTTP Smugglingμμ Smugglingμ
λ°μ
λΌλ λ»μ κ°μ§κ³ μμ΅λλ€. λ―Έλ€μ¨μ΄μ μλμλ²μμ λ°μ΄ν° μ μ‘ λ°©μμ λ€λ₯΄κ² λ°μλ€μΌ κ²½μ° λ°μνλ μ·¨μ½μ
μΌλ‘ λ€μκ³Ό κ°μ νμμΌλ‘ ννν©λλ€. κ²°κ³Όμ μΌλ‘ μλμλ² μμΌμμ λ°μ λ λ°μ΄ν°κ° λ¨μ λ λ²μ§Έ ν¨ν·κ³Ό κ²°ν©νμ¬ λ°μνλ μ·¨μ½μ μ
λλ€.Β
Smuggling μ ν
μ¬κΈ°μ
CL
μ Content-Length
μ΄κ³ TE
λ Transfer-Encoding
μ
λλ€. CLκ³Ό TEμ μμκ° μ€μνλ©°, ν΄λΉ μ νμ κΈ°μ΄λ‘ νμ¬ λ€μν λ°©λ²μ ν΅ν Smugglingμ ν μ μμ΅λλ€. - CL-CL
- CL-TE
- TE-CL
- TE-TE
- CL.0
Β
CL-CLμ λ³΄ν΅ 400 μν μ½λλ₯Ό μλ΅ν¨μΌλ‘, ν΄λΉ 곡격μ μ μΈνκ³ μμ νκ² μ΅λλ€. ( μ½λ€ 보면 CL-CLλ μμ°μ€λ½κ² μκ² λμλλ€. )
Β
Β
Β
Β
2.1 CL-TE
λ―Έλ€μ¨μ΄κ° CL
(Content-Length)μ, μλμλ²κ° TE
(Transfer-Encoding) ν€λ νμμΌλ‘ λ°μ΄ν° μ μ‘μ μ§μν λ μ·¨μ½μ μ΄ λ°μν©λλ€. Β
μμλ‘ μ΄λ€ μ¬μ΄νΈμ
CL-TE
곡격μ μνν΄ λ³΄κ² μ΅λλ€. Content-Lengthλ₯Ό μ§μνλ λ―Έλ€μ¨μ΄μ Content-Lengthμ Transfer-Encodingν€λλ₯Ό λ λ€ μμ±ν©λλ€.- νλ‘ νΈμλλ CLμ μ§μνκΈ° λλ¬Έμ POSTλ°μ΄ν° κΈΈμ΄μΈ
35
λ§νΌ λ°μ΄ν°λ₯Ό λ°μλ€μ λλ€.
νμ§λ§ Transfer-Encodingμ μ§μνλ μλ μλ²λ μ΄λ¨κΉμ?
Β
Β
λ€μκ³Ό κ°μ΄ λ μλ²κ°
νκ°μ μμ²μ λ€λ₯Έ ν΄μμ μνν©λλ€.
CLμ λ―Έλ€μ¨μ΄(리λ²μ€ νλ‘μ, νΉμ μ 1μλ²)κ° ν΄μν λ²μμ΄κ³ , TEλ μλμλ²(λ°±μλ μλ²)κ° ν΄μν λ²μμ
λλ€.- μλμλ²λ
0\r\n\r\n
μ λ§μ§λ§μΌλ‘ ν¨ν·μ΄ μ’ λ£λμλ€κ³ νλ¨ν©λλ€.
- μ΄λ κ² λλ©΄
0\r\n\r\n
μ΄νμ λ°μ΄ν°λ μ’ λ£λμ§ μμμλμλ²μ μμΌμ λ°μ΄ν°λ‘ λ¨κ² λ©λλ€.
Β
Β
π 첫 λ²μ§Έ μμ² λμν
- ν΄λΌμ΄μΈνΈ(곡격μ)λ Smuggling νμ΄λ‘λκ° λ΄κΈ΄ ν¨ν·μ λ―Έλ€μ¨μ΄μ μ λ¬ν©λλ€.
- 리λ²μ€ νλ‘μλ ν¨ν·μ μ΄μμ΄ μκΈ° λλ¬Έμ λ°±μλ μλ²λ‘ μ λ¬ν©λλ€.
- μλ²λ
Transfer-Encoding ν€λ
νμμ λ°λΌ0\r\n\r\n
κΉμ§λ§ ν¨ν·μ λ°μ μ²λ¦¬ν©λλ€.
- μ²λ¦¬λμ§ μμ
smuggling νμ΄λ‘λ
λ μλ μλ² μμΌμ λ¨μμκ² λ©λλ€.
Β
Β
κ·ΈλΌ λ λ²μ§Έ μμ²μλ μ΄λ€ μλ΅μ΄ λ΄κ²¨μ¬κΉμ?
λ λ²μ§Έ ν¨ν·μ
λλ€.
- smuggling κ³΅κ²©μ΄ μ±κ³΅νμ¬
404 Error
μ λ°νν©λλ€.
Β
Β
π λ λ²μ§Έ μμ² λμν
- ν΄λΌμ΄μΈνΈ(곡격μ)μ μμ² ν¨ν·μ΄ λ―Έλ€μ¨μ΄λ₯Ό κ±°μ³ λ°±μλ μλ²κΉμ§ λλ¬ν©λλ€.
- λ°±μλ μλ²μμλ
μ²λ¦¬λμ§ λͺ»ν smuggling νμ΄λ‘λ
+λ λ²μ§Έ μμ² ν¨ν·
μ΄ κ²°ν©λκ³ , μλ²μμλ κ²°ν©λ ν¨ν·μ μ²λ¦¬νμ¬ μλ΅ν©λλ€.
- κ²°ν©λ ν¨ν·μ μλ²κ° ν΄μνκΈ°μ
/404
κ²½λ‘λ‘ μμ²νλ κ²μ λν μλ΅μ μνν©λλ€. (μλ μΉμ¬μ΄νΈμ μμ²νκΈ° λλ¬ΈμNot Found
λ°μ΄ν°κ° μλ΅λ©λλ€.)
Β
Β
κ·ΈλΌ μ΄λ€ μν₯μ λΌμΉ μ μμκΉμ?
곡격μκ° μμ²μ λ λ² μννμ¬ μ κ·Όν μ μλ κ²½λ‘λ‘ μ κ·Όνκ±°λ
- 곡격 μ΄ν μμ²λ
ν΄λΌμ΄μΈνΈμ μμ²μ μ€μΌ
μν¬ μ μμ΅λλ€.
Β
Β
Β
Β
Β
2.2 TE-CL
μλμλ²κ° CL
(Content-Length)μ, λ―Έλ€μ¨μ΄κ° TE
(Transfer-Encoding) ν€λ νμμΌλ‘ λ°μ΄ν° μ μ‘μ μ§μν λ μ·¨μ½μ μ΄ λ°μν©λλ€. Β
μμλ‘ μ΄λ€ μ¬μ΄νΈμ
TE-CL
곡격μ μνν΄ λ³΄κ² μ΅λλ€.0
μ΄μ κΉμ§μ κΈΈμ΄λ₯Ό μΈ‘μ ν©λλ€. (5e)
λ²νλ₯Ό μ°λ κ²½μ° 0 μ΄μ κΉμ§μ λ°μ΄ν°λ₯Ό λλκ·Έλ‘ κΈμΌλ©΄ μμ hexκ°μ΄ λνλ©λλ€.
5e
λ κΈΈμ΄μ hexκ° μ λλ€.
Β
Β
λ€μκ³Ό κ°μ΄ λ μλ²κ°
νκ°μ μμ²μ λ€λ₯Έ ν΄μμ μνν©λλ€.
TE
λ λ―Έλ€μ¨μ΄(리λ²μ€ νλ‘μ, νΉμ μ 1μλ²)κ° ν΄μν λ²μμ΄κ³ , CL
λ μλμλ²(λ°±μλ μλ²)κ° ν΄μν λ²μμ
λλ€.- μ²μ νλ‘μ(TE)λ
0\r\n\r\n
μ΄μ κΉμ§μ λ°μ΄ν°λ₯Ό μ λΆbody
κ°μΌλ‘ λ³΄κ³ λ°±μ€λ μλ²(CL)λ‘ λκΈ°κ² λ©λλ€.
- CLμ Content-Lengthκ° 4 μμΌλ‘,
5e
λ₯Ό μ μΈν λ°μ΄ν°λ μ½μ§ μμ΅λλ€.
- μ΄λ κ² λ¨μ λ°μ΄ν°λ μλ²μ μμΌμ μμ¬ λ°μ΄ν°λ‘ λ¨κ² λ©λλ€.
Β
Β
μ Content-Lengthκ° 4λ‘ μΈ‘μ λλμ? β (λ°μ΄νΈ)
5
e
\r
\n
Β
π 첫 λ²μ§Έ μμ² λμν
- ν΄λΌμ΄μΈνΈ(곡격μ)λ λ―Έλ€μ¨μ΄(νλ‘μ)μκ²
Smuggling νμ΄λ‘λκ° λ΄κΈ΄ POST μμ²μ 보λ λλ€.
- λ―Έλ€μ¨μ΄λ
TE
λ‘ νλ¨νκ³ μ μ ν¨ν·μΌλ‘ κ°μ£Ό, λ°±μλ μλ²λ‘ μ μ‘ν©λλ€.
- λ°±μλ μλ²λ CLλ‘ νλ¨νκ³ TE νμμμ λ°μ΄ν°μ κΈΈμ΄λ₯Ό λνλ΄λ
5E
κΉμ§λ§ Bodyλ‘ νλ¨ν©λλ€.
- μ΄λ κ²
5E
λ€μ μλSmuggling ν¨ν·μ μμ¬ λ°μ΄ν°λ‘ μμΌμ λ¨μμκ² λ©λλ€.
Β
Β
λ λ²μ§Έ ν¨ν·μ
λλ€.
CL-TE
μ λ§μ°¬κ°μ§λ‘, μμΌμ λ¨μμλ λ°μ΄ν°μ λ λ²μ§Έ ν¨ν·μ΄ ν©μ³μ Έ
/404
νμ΄μ§λ‘ μμ²ν κ²μ λν μλ΅μ΄ μ€κ² λ©λλ€.Β
Β
π λ λ²μ§Έ μμ² λμν
- ν΄λΌμ΄μΈνΈκ° λ λ²μ§Έ ν¨ν· μ μ‘
- λ―Έλ€μ¨μ΄ β μλ μλ² ν¨ν· μ μ‘
μλμλ² μμΌμ λ¨μμλ μμ¬ λ°μ΄ν° + λλ²μ§Έ ν¨ν·
μ΄ κ²°ν©ν΄μ곡격μκ° μλν μμ² μμ±(/404)
- μλ²λ ν΄λΌμ΄μΈνΈμκ²
/404
κ²½λ‘λ‘ μμ²ν κ²μ λν μλ΅μ λ°νλ©λλ€.
Β
Β
Β
Β
Β
Β
3.3 TE.TE
κ°μ Body μ²λ¦¬ λ°©μ(Transfer-Encoding)μ μ¬μ©ν΄λ μ·¨μ½μ μ΄ λ°μνκΈ°λ ν©λλ€.
Transfer-Encoding
ν€λλ₯Ό λ€μν λ°©μμΌλ‘ λλ
ν νΉμ μ‘°μνμ¬, λ―Έλ€μ¨μ΄ νΉμ μλμλ² λμ€ νλκ° μ²λ¦¬λ₯Ό νμ§ μκ² νλ©΄λ©λλ€.
Β
π μμλ‘ λ€μκ³Ό κ°μ ν¨ν·μ μ λ¬ν΄ λ³΄κ² μ΅λλ€.
Β
Β
νλ‘ νΈμλ μλ²λ
Transfer-Encoding: wtf
λ₯Ό λ³΄κ³ μ¬λ°λ₯΄μ§ μλ€κ³ μκ°νμ¬ Content-Length
μΌλ‘ ν΄λΉ Body λ°μ΄ν°λ₯Ό νμ±ν©λλ€. μ΄λ κ² λλ©΄ CL.TE
μ·¨μ½μ μ΄ λ°μνκ² λ©λλ€.λ€λ₯Έ μ μ, λ―Έλ€μ¨μ΄μ μλμλ²κ° CLκ³Ό TEλ₯Ό λͺ¨λ νμ± νμ§λ§,
νλ‘ νΈμλμμλ Transfer-Encoding: wtfλ₯Ό μ΄μνλ€κ³ νλ¨νμ¬ Content-Length
λ‘ νμ±ν κ² μ
λλ€.Β
Β
Content-Lengthλ₯Ό μ μμ μΌλ‘ μ£Όμμ λλ λ¬Έμ μμ΄ λμν©λλ€.
Β
Β
μ΄λ° μμΌλ‘ TEλ₯Ό λλ
ννμ¬ μλ² μ€ νλκ° ν€λλ₯Ό μ²λ¦¬νμ§ μλλ‘ ν μ μμ΅λλ€. λ κ°μ μλ² μ€ ν κ°μ μλ²λ§ TE ν€λλ₯Ό μ²λ¦¬νμ§ μκ² λλ©΄ λλ¨Έμ§ κ³Όμ μ κΈ°μ‘΄μ CL.TE, TE.CL μ·¨μ½μ κ³Ό κ°μ΅λλ€.
Β
π€ͺ λλ
ν μ’
λ₯
Β
Β
Β
Β
Β
2.4 CL.0
CL.0μ
λ―Έλ€μ¨μ΄μμλ CLμ μ²λ¦¬νμ§λ§ μλμλ²μμλ CLμ μ²λ¦¬νμ§ μμ κ²½μ°
λ°μνλ μ·¨μ½μ μ
λλ€.λμΌ TCP Connectionμμ λ°μνκΈ° λλ¬Έμ ν€λμ
Connection: keep-alive
κ° μμ΄μΌ ν©λλ€. (νΉμ λ²ν μ€μ μ λ§μ§λ€ 보면 μλμΌλ‘ μμ² μ λΆμ¬μ£Όλ κ² κ°κΈ°λ ν©λλ€.)Β
μμλ‘ λ―Έλ€μ¨μ΄ μμλ
Content-Length: 30
μ ν΄μνκΈ° λλ¬Έμ λ¬Έμ μμ΄ μλν©λλ€.- νμ§λ§ ν΄λΉ μμ²μ μλμλ²μμ Content-Lengthκ° νμ±λμ§ μμ΅λλ€. (κ·Έλμ CL.0) μ΄λΌκ³ ν©λλ€.
- (ν΄λΉ λ¬Έμ μμλ λ°±μλμλ²κ°
/resources
κ²½λ‘λ μμμ νμνκΈ°μ, Body λ°μ΄ν°λ₯Ό νμ±νμ§ μμ λ°μνλ€κ³ μκ°λ©λλ€.)
- μ΄λ κ² λ¬΄μλ
λ λ²μ§Έ ν¨ν·μ
λ€μλ² μμ²μ Smuggling λ©λλ€.
Β
Β
λ λ²μ§Έ μΌλ° ν¨ν·μ
λλ€. μμλλ‘
/
κ²½λ‘μ μμ²μ νμμ§λ§ Smugglingλ ν¨ν·μ μμ²μΌλ‘ μ΄λν©λλ€.Β
Β
Β
Β
Β
Β
Β
Β
3. HTTP Smuggling (HTTP/2)
3.1 HTTP/1.1 vs 2
Smugglingμ νλ κ΄μ μμ HTTP λ²μ μ μ€μν μ°¨μ΄λ₯Ό 보μ
λλ€.
μμλ‘ HTTP/1.1μμ ν€λ μ μ‘ λ°©μμ ν
μ€νΈ κΈ°λ°μΌλ‘ μ μ‘λλ©°,
\r\n
μΌλ‘ ꡬλΆλ©λλ€. νμ§λ§ HTTP2λ λ°μ΄λ리 νλ μμΌλ‘ μ μ‘λκΈ° λλ¬Έμ κ°νμ μ¬μ©ν νμλ μκ³ , νλ μ λ¨μλ‘ μ μ‘λκΈ° λλ¬Έμ Content-Length
λν μ¬μ©λμ§ μμ΅λλ€.Β
νν λ°©μ λν λ€λ¦
λλ€. μμλ‘ κ°μ μΉ μμ² ν¨ν·μ λ²μ μ λ°λΌ λ€λ₯΄κ² νννλ©΄ λ€μκ³Ό κ°μ΅λλ€.
Β
π HTTP/1.1
Β
π HTTP/2
- μ€μ λ‘ μ½λ‘ μΌλ‘ ννλμ§ μμΌλ©°, λ°μ΄λ리 λ°μ΄ν°λ‘ μΈμ½λ©λμ΄ μ μ‘λ©λλ€.
Β
Β
Β
Β
Β
Β
3.2 downgrades HTTP/2 requests
HTTP/2 νκ²½μμλ κΈ°μ‘΄μ μ‘΄μ¬νλ Smuggling곡격μ μ¬μ©ν μ μμ΅λλ€.
λμ ν΄λΌμ΄μΈνΈμ λ―Έλ€μ¨μ΄κ° http/2 ν΅μ μ μννκ³ , λ―Έλ€μ¨μ΄μ μλμλ²κ° HTTP/1.1 ν΅μ μ μννλ€λ©΄
, μ·¨μ½μ μ νΈλ¦¬κ±° ν μ μμ΅λλ€.Β
H2.CL
β‘οΈ
νλ‘ νΈμλ
β λ―Έλ€μ¨μ΄
: HTTP/2 μ¬μ©β‘οΈ
λ―Έλ€μ¨μ΄
β μλμλ²
: HTTP/1.1 μ¬μ©- μλμλ²μμλ Content-Lengthκ° 0μ΄λΌκ³ μκ°ν¨μΌλ‘μ¨ μ΄νμ μ€λ ν¨ν·μ μμΌμ λ°μ΄ν°κ° λ¨κ² λ©λλ€.
- λ λ²μ§Έ μμ²λΆν°λ νΌν΄μμ μμ²μ΄ Smugglingλ ν¨ν· λ€λ‘ λΆμ΄ κ³΅κ²©μ΄ μ€νλ©λλ€.
Β
π― μμ
Β
Β
Β
H2.TE
HE.CL
κ³Ό λμΌν λ°©μμ
λλ€.HTTP/2
μμλ Transfer-Encodingμ μ²λ¦¬νμ§ μμμΌλ‘, ν΄λΉν¨ν·μ΄ κ·Έλλ‘ μλ μλ²λ‘ λμ΄κ°κ² λκ³ μ΄λ μλ μλ²κ° TEλ₯Ό μ²λ¦¬νλ©°
Smugglingμ΄ λ°μνκ² λ©λλ€.
Β
Β
Β
Β
Β
Β
Β
Β
Β
4. Smuggling μμ
4.1 /admin
κ²½λ‘ μ κ·Ό λ°©μ§ μ°ν
보ν΅
/admin
κ²½λ‘λ localhost
μ κ°μ λ΄λΆλ§μμλ§ μ κ·Όν μ μλλ‘ νκ±°λ, IP νμ΄νΈλ¦¬μ€νΈ μ΄μ© λ±μ ν΅ν΄ μ κ·Όμ ν΅μ ν©λλ€.Β
μμλ‘ ν΄λΉ μ¬μ΄νΈμμ
/admin
κ²½λ‘λ‘ μ κ·Όνλ €κ³ νλ©΄ block λΉνλ κ²μ λ³Ό μ μμ΅λλ€.Β
Β
CL-TE
μ·¨μ½μ μ΄ μλ κ²μ νμ
νκ³ , Smuggling 곡격μ ν΅ν΄ /admin
κ²½λ‘μ μ κ·Όν©λλ€.- local usersλ§ ν¨λμ΄ νμ©λμ΄ μλ€κ³ λμ΅λλ€.
μ¬κΈ°μ μ»μ μ μλ μ 보λ νλ‘ νΈμλμμ μ μ΄νλ μΈκ° μ μ± μ μ°ν νλ€λ κ² μ λλ€.
Β
Β
local users
κ° λ΄λΆ λ§μ μν μ μ λ€μ μ§μΉν νλ₯ μ΄ λκΈ° λλ¬Έμ, Host
ν€λλ₯Ό μΆκ°ν΄μ νμΈν΄ λ³΄κ² μ΅λλ€.- ν€λκ° μ€λ³΅λμλ€κ³ λΉλλ€.
- μλ§λ μ΄νμ μμ²λλ ν¨ν·κ³Ό ν©μ³μ§ λ, ν€λκ° μ€μ²©λμ΄ κ·Έλ° κ² κ°μ΅λλ€.
- μ΄νμ μ€λ λ°μ΄ν°λ₯Ό
Body
μ²λ¦¬λ₯Ό νμ¬ λ³κ²½ν΄ λ³΄κ² μ΅λλ€.
Β
Β
HTTP/1.1 νμ€μ GET μμ²μ Bodyλ₯Ό ν¬ν¨νλ κ²μ κΈμ§νμ§λ μμ§λ§,
λλΆλΆμ μΉ μλ²μ ν΄λΌμ΄μΈνΈλ GET μμ²μ Bodyλ₯Ό 무μνλλ‘ κ΅¬νλμ΄ μμ΅λλ€.
λλ¬Έμ, μ΄νμ μ€λ ν¨ν·μ Bodyκ°μ 보λ΄κ² λλ©΄ μΌλ°μ μΈ GET μμ²κ³Ό κ°λ€κ³ ν μ μμ΅λλ€.- μ¬κΈ°μ λ λ²μ§Έλ‘ λ±μ₯νλ Content-Lengthλ μμλ‘ λΆμ¬ν©λλ€.
- μ΄νμ μ€λ λ°μ΄ν°κ° Body λ°μ΄ν°λ‘ λ€μ΄κ°κ³ , Body λ°μ΄ν°λ‘ λ€μ΄κ° ν€λ μ 보λ 무μλ¨μΌλ‘, μ μμ μΌλ‘
admin panel
μ μ κ·Όν μ μκ² λ©λλ€.
Β
Β
Β
Β
Β
4.2 λ―Έλ€μ¨μ΄βμλμλ² μ 보 μ μΆ / μ¬μ©μ μμ² Leak
λ―Έλ€μ¨μ΄ β μλ μλ² λ΄μ© μΊ‘μ³
μ¬κΈ°μ μΉμ¬μ΄νΈμ ννκ² μ¬μ©λλ κ²μ κΈ°λ₯μ΄ μ‘΄μ¬ν©λλ€.
μΉμ¬μ΄νΈλ κ²μν λ΄μ©μ Response νμ΄μ§μ κ²μ κ²°κ³Όμ ν¨κ» 보μ¬μ€λλ€.
Β
Β
μ΄λ¬ν κ²½μ°
CL-TE
μ·¨μ½μ μ μ΄μ©νκ² λλ©΄, λ―Έλ€μ¨μ΄κ° μλ μλ²μ μμ²νλ μ 보λ₯Ό μΊ‘μ³ν μ μμ΅λλ€.μ΄λ€μμΌλ‘ κ°λ₯ν κΉμ?
κ·Έλ¦Όκ³Ό κ°μ΄, 첫 λ²μ§Έ Smuggling ν¨ν·μμ Content-Lengthλ₯Ό μΆ©λΆνκ² κΈΈκ² μ£Όκ³ search νλΌλ―Έν° λ€μ valueλ₯Ό λΉμλ‘λλ€.
Β
μ΄λ κ² λλ©΄ μλ μλ²μ μμΌμ Smugglingλ νμ΄λ‘λκ° λ¨κ² λ©λλ€.
Β
μ΄λ λ λ²μ§Έ μμ²μ λ°μμν€λ©΄
search=λλ²μ§Έ μμ² ννλ‘
λ―Έλ€μ¨μ΄κ° μλ μλ²λ‘ λ³΄λΈ μμ²μ΄ κ²μ κΈ°λ‘μ²λΌ Store λκΈ° λλ¬Έμ 곡κ°λμ§ μμ ν€λ μ 보 μ μΆ
μ΄ κ°λ₯ν©λλ€. - λ³΄ν΅ λ―Έλ€μ¨μ΄μμ μΆκ°λ ν€λλ₯Ό μλμλ²μμ νμ±νκ³ λ ΈμΆνμ§ μκΈ° λλ¬Έμ μμλΌ λ°©λ²μ΄ μμ΅λλ€.
- νμ§λ§ HTTP Smugglingμ ν΅ν΄
μμ² ν¨ν· μ체
λ₯Ό Leak ν¨μΌλ‘μ¨, λΉλ° ν€λλ₯Ό μμλΌ μ μμμ΅λλ€.
Β
Β
Β
μ¬μ©μ μμ² Leak
λ§μ°¬κ°μ§λ‘ HTTP Smugglingμ μ¬μ©νλ©΄ μΌλ° μ μ μ
μΏ ν€μ 보, νΉμ ν€λ, μΈμ¦ μ 보
λ±μ μμ μ€λͺ
ν λ°©μμ²λΌ ν΄νΉν μ μμ΅λλ€.Β
- μ¬μ©μμ μμ²μ΄ μΉμ¬μ΄νΈμ μ μ₯λλ μλΉμ€λ₯Ό μ°Ύμ΅λλ€.
HTTP Smuggling
μ ν΅ν΄ μΉμ¬μ΄νΈμ 무μΈκ°κ° μ μ₯λλ ν¨ν·μ Smuggling ν©λλ€.
- μ¬μ©μκ° μΉμ¬μ΄νΈμ μ κ·Όν©λλ€.
- Smugglingλ ν¨ν·κ³Ό μ¬μ©μμ μ κ·Ό ν¨ν·μ΄ ν©μ³μ§μΌλ‘μ¨, μ¬μ©μλ μμ μ μμ² μ 보λ₯Ό μΉμ¬μ΄νΈμ μ μ₯νκ² λ©λλ€.
- 곡격μλ μ μ₯λ μ 보λ₯Ό λ°νμΌλ‘ μ¬μ©μμΈ μ² μμ₯ ν©λλ€.
Β
Β
π μμ
β οΈ μμ μ
λλ€. ν¨ν· μ λ³΄κ° μ¬λ°λ₯΄μ§ μμ μ μμ΅λλ€.
Β
곡격μλ Smuggling ν¨ν·μ
Content-Length
λ₯Ό μΆ©λΆν μ£Όκ³ , email=
μ ν΅ν΄ μ¬μ©μμ μ λ³΄κ° μ΄λ©μΌ μΉμ
μ λ΄κΈ°κ² ν©λλ€.Β
Β
곡격μμ Smuggling μλ μ΄ν, μΉ μλ²μ μ κ·Όν νΌν΄μλ μμ μ μμ² μ 보λ₯Ό
/post/comment
μ μ μ₯νκ² λ©λλ€.Β
Β
μ΄λ° μμΌλ‘ Smugglingμ λ€μν μ·¨μ½μ μ λ΄ν¬νκ³ μμ΅λλ€. μλ²μ λ°μ΄ν° νμ± λ°©λ²μ λ°λΌ λΆμνκ³ , μ΄λ€ μ 보λ₯Ό μ μΆν μ μλμ§ νμΈνμ¬μΌ ν©λλ€.
Β
Β
Β
Β
Β
Reference
Β